﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;

namespace Voluntariar.WEB.Util
{
    public abstract class HandlerBase : IHttpHandler
    {
        #region Atributos

        // Contexto do Handler. 
        // (Deve ser setado no "construtor" (ProcessRequest) do handler)
        protected HttpContext httpContext;

        #endregion

        #region IHttpHandler Members


        public virtual bool IsReusable
        {
            get
            {
                return false;
            }
        }

        public virtual void ProcessRequest(HttpContext context)
        {
            this.httpContext = context;
        }

        #endregion

        #region Métodos

        #region Recuperar Parâmetros

        /// <summary>
        /// Usado por handlers que necessitem recuperar parâmetros através da URL
        /// </summary>
        /// <param name="parametro">Nome do parâmetro na url</param>
        /// <returns></returns>
        protected int RecuperarParametroInteiro(string parametro)
        {
            try
            {
                string strValor = this.RecuperarParametroString(parametro);
                if (!string.IsNullOrEmpty(strValor))
                    return int.Parse(strValor);
            }
            catch
            {
                throw new ApplicationException("Valor incorreto informado no endereço web.");
            }

            return -1;
        }
        /// <summary>
        /// Usado por handlers que necessitem recuperar parâmetros através da URL ou post.
        /// </summary>
        /// <param name="parametro">Nome do parâmetro na url ou form (post)</param>
        /// <returns></returns>
        protected string RecuperarParametroString(string parametro)
        {
            string valor = null;

            // QueryString
            if (this.httpContext.Request.QueryString[parametro] != null)
                valor = this.httpContext.Server.UrlDecode(this.httpContext.Request.QueryString[parametro].ToString());

            // Form
            if (string.IsNullOrEmpty(valor))
                if (this.httpContext.Request.Form[parametro] != null)
                    valor = this.httpContext.Server.UrlDecode(this.httpContext.Request.Form[parametro].ToString());

            return valor;
        }
        #endregion

        #endregion
    }
}
